昨天的controller中的index已經可以正常執行,今天來講解其他幾個Function。
下面的語法可以一次幫你建立好CRUD的路由,在web.php只要留下下面這一行就可以了。
// routes/web.php
Route::resource('news','Newscontroller');
終端機打入下面語法,就會顯示目前所有的路由,方便查看,如果忘記有寫哪些路由,就可以這樣查詢。
php artisan route:list
public function create(){
return '新增一筆資料';
}
網址打上:http://127.0.0.1:8000/news/create ,看看有沒有正常執行
public function show($id){
return '最新消息'.$id;
}
網址打上:http://127.0.0.1:8000/news/1 ,就可以看到上面的字串跟傳進去的id
edit、update、destroy、show,這幾個Function都是傳參數進去,可以修改特定的某筆資料。
如果你的controller只處理單個行為的話,就可以使用__invoke的方法,而在route裡面也只要寫上controller的名字就可以抓到controller的資料。
//web.php
Route::get('user/{id}', 'ShowProfile');
//controller
<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
class ShowProfile extends Controller
{
public function __invoke($id)
{
return view('user.profile', ['user' => User::findOrFail($id)]);
}
}
可以在route的後面加上middleware字樣和名稱即可使用
Route::get('profile', 'UserController@show')->middleware('auth');
也可以在controller中加入middleware使用
class UserController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->middleware('log')->only('index');
$this->middleware('subscribed')->except('store');
}
}
或是直接在midddleware裡面加入閉包寫middleware,如果你的middleware程式碼很少的話就可以使用這個方法,就不用在特別新增一個middleware了。
$this->middleware(function ($request, $next) {
// ...
return $next($request);
});
在後續章節會有完整的CRUD教學
Route::get('user/{id}', 'ShowProfile');
是否該改為
Route::get('/user/{id}', 'ShowProfile');
是否漏了UserController建立的指令?
php artisan make:controller --resource UserController
Route::get('profile', 'UserController@show')->middleware('auth');
是否需改為
Route::get('/profile', 'UserController@show')->middleware('auth');